<?php
/**************************************************视频模块***************************************************/
/**
 * 调用播放器
 * @version 1.4.0 首次引入
 * @param array $options 播放器参数，数组格式
 * @return string $string html代码
 */
function DcPlayer($options=[]){
    $video = new \daicuo\Video();
    return $video->player($options);
}

/**************************************************编辑器模块***************************************************/
/**
 * 调用编辑器解析函数
 * @version 1.6.0 首次引入
 * @param string $content 内容
 * @return mixed $mixed 解析后的内容
 */
function DcEditor($content=''){
    if(config('common.editor_name') != 'textarea'){
        if( $function = config(config('common.editor_name').'.editor_function') ){
            return call_user_func_array($function, [$content]);
        }
    }
    return $content;
}
/**
 * 根据框架配置获取当前编辑器路径
 * @version 1.6.0 首次引入
 * @return string $string 后台设置的编辑器路径
 */
function DcEditorPath(){
    if(config('common.editor_name') != 'textarea'){
        if( $editorPath = config(config('common.editor_name').'.editor_path') ){
            return $editorPath;
        }
    }
    return config('form_view.editor');
}
/**
 * 获取已安装的编辑器列表
 * @version 1.6.0 首次引入
 * @return array $array 普通数组列表（键名为模块名）
 */
function DcEditorOption(){
    $option = [];
    foreach(config('common.editor_list') as $editor){
        $option[$editor] = lang($editor);
    }
    return $option;
}

/**************************************************分页模块***************************************************/
/**
 * 解析页码为HTML
 * @version 1.1.0 首次引入
 * @param number $index 当前页
 * @param number $rows 每页数量 
 * @param number $total 总记录数
 * @param string $path URL路径
 * @param array $query URL额为参数
 * @param string $fragment URL锚点 
 * @param string $varpage 分页变量
 * @return string $string HTML代码
 */
function DcPage($index=1, $rows=10, $total=1, $path='', $query=[], $fragment='', $varpage='pageNumber'){
    $page = new \page\Bootstrap('', $rows, $index, $total, false, [
        'var_page' => $varpage,
        'path'     => str_replace('%5BPAGE%5D','[PAGE]',$path),//url('index/index/index','','')
        'query'    => $query,
        'fragment' => $fragment,
    ]);
    return $page->render();
}
/**
 * 单页分页代码HTML
 * @version 1.1.0 首次引入
 * @param number $index 当前页
 * @param number $total 总页数 
 * @return string $string HTML代码
 */
function DcPageSimple($page=1, $total=1, $path=''){
    //统一变量
    $path = str_replace('%5BPAGE%5D','[PAGE]', $path);
    //上一页按钮
    if ($page <= 1) {
        $preButton = '<li class="page-item disabled"><a class="page-link" href="javascript:;">&laquo;</a></li>';
    }else{
        $url = str_replace('[PAGE]', $page-1, $path); 
        $preButton = '<li class="page-item"><a class="page-link" href="' . htmlentities($url) . '">&laquo;</a></li>';
    }
    //下一页按钮
    if ($page == $total) {
        $nextButton = '<li class="page-item disabled"><a class="page-link" href="javascript:;">&raquo;</a></li>';
    }else{
        $url = str_replace('[PAGE]', $page+1, $path);  
        $nextButton = '<li class="page-item"><a class="page-link" href="' . htmlentities($url) . '">&raquo;</a></li>';
    }
    return sprintf('<ul class="pagination">%s %s</ul>', $preButton, $nextButton);
}
/**
 * 根据字段过滤分页参数、只保留默认两个
 * @version 1.6.0 首次引入
 * @param array $args 必需;参数列表
 * @return array $array 只返回字段中的条件语句
 */
function DcPageFilter($args=[]){
    if($args['limit'] && $args['page']){
        return [
            'list_rows' => $args['limit'],
            'page' => $args['page'],
        ];
    }
    return [];
}

/****************************************************配置模块***************************************************/
/**
 * 批量更新与新增动态配置、常用于需自动加载的配置
 * @version 1.6.0 首次引入
 * @param array $formData 必需;表单数据(key=>value)成对形式;默认：空
 * @param string $module 必需;模块名称;默认：common
 * @param string $controll 可选;控制器名;默认：NULL
 * @param string $action 可选;操作名;默认：NULL
 * @param int $order 可选;排序值;默认：0
 * @param string $autoload 可选;自动加载;默认：yes
 * @param string $status 可选;状态;默认：normal
 * @return array $array 数据集
 */
function DcConfigWrite($formData=[], $module='common', $controll='config', $action='system', $order=0, $autoload='yes', $status='normal'){
    return \daicuo\Op::write($formData, $module, $controll, $action, $order, $autoload, $status);
}
/**
 * 添加动态配置至数据库
 * @version 1.6.0 首次引入
 * @param array $data 必需;普通表单数组形式;默认：空
 * @return mixed $mixed 自增ID
 */
function DcConfigSave($data=[]){
    //数据过滤
    $data = DcArrayIsset($data, ['op_name','op_value','op_module','op_controll','op_action','op_order','op_status','op_autoload']);
    //合并初始参数
    $data = DcArrayArgs($data,[
        'op_module'    => 'common',
        'op_controll'  => 'system',
        'op_action'    => 'config',
        'op_order'     => 0,
        'op_autoload'  => 'yes',
        'op_status'    => 'normal',
    ]);
    return \daicuo\Op::save($array);
}
/**
 * 批量添加动态配置至数据库
 * @version 1.6.0 首次引入
 * @param array $data 必需;二维数组;默认：空
 * @return obj $obj 多条数据集
 */
function DcConfigSaveAll($data=[]){
    foreach($data as $key=>$value){
        if(!$value['op_name']){
            unset($data[$key]);
            continue;
        }
    }
    return \daicuo\Op::save_all($data);
}
/**
 * 按条件删除一条动态配置
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type string $module 可选;模型名称;默认：空
 *     @type string $controll 可选;控制器名称;默认：空
 *     @type string $action 可选;操作名称;默认：空
 *     @type int $id 可选;配置ID;默认：空
 *     @type string $name 可选;配置名称;默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed $mixed 查询结果（array|null）
 */
function DcConfigDelete($args=[]){

    if(!$where = $args['where']){
        $where = DcWhereFilter($args, ['module','controll','action','status','id','name'], 'eq', 'op_');
    }

    return \daicuo\Op::delete($where);
}
/**
 * 按ID条件删除一条动态配置
 * @version 1.6.0 首次引入
 * @param mixed $value 必需;Id值/多个用逗号分隔或者数组(string|array)；默认：空
 * @return mixed $mixed 删除结果(obj|null)
 */
function DcConfigDeleteId($value=''){
    return \daicuo\Op::delete_id($value);
}
/**
 * 按条件删除多条动态配置
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type string $module 可选;模型名称;默认：空
 *     @type string $controll 可选;控制器名称;默认：空
 *     @type string $action 可选;操作名称;默认：空
 *     @type int $id 可选;配置ID;默认：空
 *     @type string $name 可选;配置名称;默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed $mixed 查询结果（array|null）
 */
function DcConfigDeleteAll($args=[]){
    if(!$where = $args['where']){
        $where = DcWhereFilter($args, ['module','controll','action','status','id','name'], 'eq', 'op_');
    }
    return \daicuo\Op::delete_all($where);
}
/**
 * 按条件删除一条数组配置指定的KEY
 * @version 1.6.0 首次引入
 * @param array $where 查询条件（一维数组）
 * @param string $opValueKey 数组KEY值
 * @return mixed $mixed 操作结果(array|false)
 */
function DcConfigDeleteKey($where=[], $opValueKey=''){
    if($where && $opValueKey){
        return \daicuo\Op::delete_value_key($where, $opValueKey);
    }
    return false;
}
/**
 * 按条件修改配置列表
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type string $module 可选;模型名称;默认：空
 *     @type string $controll 可选;控制器名称;默认：空
 *     @type string $action 可选;操作名称;默认：空
 *     @type int $id 可选;配置ID;默认：空
 *     @type string $name 可选;配置名称;默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @param array $data 必需;待修改的数据（普通表单数组形式）;默认：空
 * @return mixed $mixed 查询结果（array|null）
 */
function DcConfigUpdate($args=[], $data=[]){
    if(!$where = $args['where']){
        $where = DcWhereFilter($args, ['module','controll','action','status','id','name'], 'eq', 'op_');
    }
    return \daicuo\Op::update($where, $data);
}
/**
 * 按Id修改一个配置
 * @param int $opId 必需;ID值;默认：空
 * @param array $data 必需;表单数据（一维数组）;默认：空 
 * @return mixed $mixed obj|null;不为空时返回obj
 */
function DcConfigUpdateId($opId, $data){
    return \daicuo\Op::update_id($opId, $data);
}
/**
 * 按条件更新一条数组配置指定的KEY
 * @version 1.6.0 首次引入
 * @param array $where 查询条件（一维数组）
 * @param string $opValueKey 数组KEY值
 * @param string $opValueData 数组Value
 * @return mixed $mixed 操作结果(array|false)
 */
function DcConfigUpdateKey($where=[], $opValueKey='', $opValueData=''){
    return \daicuo\Op::update_value_key($where, $opValueKey, $opValueData);
}
/**
 * 按条件更新一条数组配置的多个数组值
 * @version 1.6.0 首次引入
 * @param array $where 必需;查询条件（一维数组）;默认：空
 * @param array $opValueData 必需;key=>Value类型的数据;默认：空
 * @return mixed $mixed 更新结果（obj|false）
 */
function DcConfigUpdateArray($where=[], $opValueData=''){
    return \daicuo\Op::update_value_array($where, $opValueData);
}
/**
 * 按条件获取一个配置列表
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：true
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type string $module 可选;模型名称;默认：空
 *     @type string $controll 可选;控制器名称;默认：空
 *     @type string $action 可选;操作名称;默认：空
 *     @type int $id 可选;配置ID;默认：空
 *     @type string $name 可选;配置名称;默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed $mixed 查询结果（array|null）
 */
function DcConfigFind($args=[]){
    $cache = DcBool($args['cache'],true);
    
    if(!$where = $args['where']){
        $where = DcWhereFilter($args, ['module','controll','action','status','id','name'], 'eq', 'op_');
    }

    return \daicuo\Op::get($where, $cache);
}
/**
 * 按条件获取多个配置列表
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：true
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type string $module 可选;模型名称;默认：空
 *     @type string $controll 可选;控制器名称;默认：空
 *     @type string $action 可选;操作名称;默认：空
 *     @type string $field 可选;查询字段;默认：*
 *     @type int $limit 可选;分页大小;默认：0
 *     @type int $page 可选;当前分页;默认：0
 *     @type string $sort 可选;排序字段名;默认：op_order
 *     @type string $order 可选;排序方式(asc|desc);默认：asc
 *     @type array $where 可选;自定义高级查询条件;默认：空
 *     @type array $paginate 可选;自定义高级分页参数;默认：空
 * }
 * @return mixed $mixed 查询结果（obj|null）
 */
function DcConfigSelect($args=[]){
    $defaults = array();
    if(!$args['where']){
        $defaults['where'] = DcWhereFilter($args, ['module','controll','action','status','id','name'], 'eq', 'op_');
    }
    if(!$args['paginate']){
        $defaults['paginate'] = DcPageFilter($args);
    }
    return \daicuo\Op::all( DcArrayArgs($args, $defaults) );
}

/**************************************************路由模块***************************************************/
/**
 * 添加一个路由至数据库
 * @version 1.6.0 首次引入
 * @param array $data 必需;普通表单数组形式;默认：空
 * @return mixed $mixed 自增ID
 */
function DcRouteSave($data=[]){
    return \daicuo\Route::save($data);
}
/**
 * 批量添加路由至数据库
 * @version 1.6.0 首次引入
 * @param array $data 必需;二维数组;默认：空
 * @return obj $obj 多条数据集
 */
function DcRouteSaveAll($data=[]){
    return \daicuo\Route::save_all($data);
}
/**
 * 按条件删除一条路由
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type string $module 可选;模型名称;默认：空
 *     @type string $controll 可选;控制器名称;默认：空
 *     @type string $action 可选;操作名称;默认：空
 *     @type int $id 可选;配置ID;默认：空
 *     @type string $name 可选;配置名称;默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed $mixed 查询结果（array|null）
 */
function DcRouteDelete($args=[]){

    if(!$where = $args['where']){
        $where = DcWhereFilter($args, ['module','controll','action','status','id'], 'eq', 'op_');
    }

    return \daicuo\Route::delete($where);
}

/**
 * 按ID条件删除一条动态配置
 * @version 1.6.0 首次引入
 * @param mixed $value 必需;Id值/多个用逗号分隔或者数组(string|array)；默认：空
 * @return mixed $mixed 删除结果(obj|null)
 */
function DcRouteDeleteId($value=''){
    return \daicuo\Route::delete_id($value);
}
/**
 * 按条件修改一条路由
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type string $module 可选;模型名称;默认：空
 *     @type string $controll 可选;控制器名称;默认：空
 *     @type string $action 可选;操作名称;默认：空
 *     @type int $id 可选;配置ID;默认：空
 *     @type string $name 可选;配置名称(site_rotue);默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @param array $data 必需;待修改的数据（普通表单数组形式）;默认：空
 * @return mixed $mixed 查询结果（array|null）
 */
function DcRouteUpdate($args=[], $data=[]){
    if(!$where = $args['where']){
        $where = DcWhereFilter($args, ['module','controll','action','status','id','name'], 'eq', 'op_');
    }
    return \daicuo\Route::update($where, $data);
}
/**
 * 按Id修改一条路由
 * @param int $opId 必需;ID值;默认：空
 * @param array $data 必需;表单数据（一维数组）;默认：空 
 * @return mixed $mixed obj|null;不为空时返回obj
 */
function DcRouteUpdateId($opId, $data){
    return \daicuo\Route::update_id($opId, $data);
}
/**
 * 按条件获取一条路由
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：true
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type string $module 可选;模型名称;默认：空
 *     @type string $controll 可选;控制器名称;默认：空
 *     @type string $action 可选;操作名称;默认：空
 *     @type int $id 可选;配置ID;默认：空
 *     @type string $name 可选;配置名称(site_rotue);默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed $mixed 查询结果（array|null）
 */
function DcRouteFind($args=[]){
    $cache = DcBool($args['cache'], true);
    if(!$where = $args['where']){
        $where = DcWhereFilter($args, ['module','controll','action','status','id','name'], 'eq', 'op_');
    }
    return \daicuo\Route::get($where, $cache);
}
/**
 * 按条件获取多个路由
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：true
 *     @type string $field 可选;查询字段;默认：*
 *     @type string $module 可选;模型名称;默认：空
 *     @type string $controll 可选;控制器名称;默认：空
 *     @type string $action 可选;操作名称;默认：空
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type int $limit 可选;分页大小;默认：0
 *     @type int $page 可选;当前分页;默认：0
 *     @type string $sort 可选;排序字段名;默认：op_order
 *     @type string $order 可选;排序方式(asc|desc);默认：asc
 *     @type array $where 可选;自定义高级查询条件;默认：空
 *     @type array $paginate 可选;自定义高级分页参数;默认：空
 * }
 * @return mixed $mixed 查询结果（obj|null）
 */
function DcRouteSelect($args=[]){
    $defaults = array();
    //默认参数转查询条件
    $defaults['where'] = DcWhereFilter($args, ['module','controll','action','status','id','name'], 'eq', 'op_');
    //关键字参数转查询条件
    if( $args['search'] ){
        $defaults['where'] = DcArrayArgs(['op_value'=>['like','%'.$args['search'].'%']], $defaults['where']);
        unset($args['search']);
    }
    //自定义查询条件
    if( isset($args['where']) ){
        $defaults['where'] = DcArrayArgs($args['where'], $defaults['where']);
        unset($args['where']);
    }
    //自定义分页参数
    if(!$args['paginate']){
        $defaults['paginate'] = DcPageFilter($args);
    }
    return \daicuo\Route::all( DcArrayArgs($args, $defaults) );
}

/**************************************************队列模块***************************************************/
/**
 * 添加一个队列至数据库
 * @version 1.6.0 首次引入
 * @param array $data 必需;普通表单数组形式;默认：空
 * @param string $type 必需;队例类型category|tag;默认：category
 * @return mixed $mixed 自增ID
 */
function DcTermSave($data=[], $type='category'){
    $data = DcArrayArgs($data,[
        'term_status'     => 'normal',
        'term_order'      => 0,
        'term_type'       => $type,
    ]);
    return \daicuo\Term::save($data);
}
/**
 * 批量添加队列至数据库
 * @version 1.6.0 首次引入
 * @param array $data 必需;二维数组;默认：空
 * @return obj $obj 多条数据集
 */
function DcTermSaveAll($data=[]){
    return \daicuo\Term::save_all($data);
}
/**
 * 按条件删除一条队列
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type mixed $status 可选;显示状态（normal|hidden）;默认：空
 *     @type mixed $type 可选;队列类型(stirng|array),固定范围(category|tag);默认：category
 *     @type mixed $module 可选;队列类型(stirng|array),固定范围(category|tag);默认：category
 *     @type mixed $id 可选;类型ID(int|array);默认：空
 *     @type mixed $name 可选;分类名称(stirng|array);默认：空
 *     @type mixed $slug 可选;分类别名(stirng|array);默认：空
 *     @type mixed $info 可选;分类描述(stirng|array);默认：空
 *     @type mixed $parent 可选;父级ID(int|array);默认：空
 *     @type mixed $count 可选;数量统计(int|array);默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed $mixed 查询结果（array|null）
 */
function DcTermDelete($args=[]){
    //动态参数
    $where = DcWhereFilter($args, ['id','name','slug','module','controll','action','status','type','info','parent','count'], 'eq', 'term_');
    //参数合并
    if($args['where']){
        $where = DcArrayArgs($args['where'], $where);
    }
    return \daicuo\Term::delete($where);
}
/**
 * 按ID快速删除一条分类
 * @version 1.6.0 首次引入
 * @param string $module 必需;插件应用名;默认：空
 * @return array $array 影响条数值
 */
function DcTermDeleteModule($module=''){
    return \daicuo\Term::delete_module($module);
}
/**
 * 按ID快速删除一条分类
 * @version 1.6.0 首次引入
 * @param int $value 必需;Id值;默认：空
 * @return bool $bool true|false
 */
function DcTermDeleteId($id=''){
    return \daicuo\Term::delete_id($id);
}
/**
 * 按ID快速删除多条分类
 * @version 1.6.0 首次引入
 * @param mixed $ids 必需;Id值/多个用逗号分隔或者数组(string|array);默认：空
 * @return array $array 多条删除结果
 */
function DcTermDeleteIds($ids=''){
    return \daicuo\Term::delete_ids($ids);
}
/**
 * 按条件修改一个分类
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type mixed $status 可选;显示状态（normal|hidden）;默认：空
 *     @type mixed $type 可选;队列类型(stirng|array),固定范围(category|tag);默认：category
 *     @type mixed $module 可选;队列类型(stirng|array),固定范围(category|tag);默认：category
 *     @type mixed $id 可选;类型ID(int|array);默认：空
 *     @type mixed $name 可选;分类名称(stirng|array);默认：空
 *     @type mixed $slug 可选;分类别名(stirng|array);默认：空
 *     @type mixed $info 可选;分类描述(stirng|array);默认：空
 *     @type mixed $parent 可选;父级ID(int|array);默认：空
 *     @type mixed $count 可选;数量统计(int|array);默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @param array $data 必需;待修改的数据（普通表单数组形式）;默认：空
 * @return mixed $mixed 查询结果（array|null）
 */
function DcTermUpdate($args=[], $data=[]){
    //动态参数
    $where = DcWhereFilter($args, ['id','name','slug','module','controll','action','status','type','info','parent','count'], 'eq', 'term_');
    //参数合并
    if($args['where']){
        $where = DcArrayArgs($args['where'], $where);
    }
    return \daicuo\Term::update($where, $data);
}
/**
 * 按Id快速修改一个分类
 * @param int $id 必需;ID值;默认：空
 * @param array $data 必需;表单数据（一维数组）;默认：空 
 * @return mixed $mixed obj|null
 */
function DcTermUpdateId($id, $data){
    return \daicuo\Term::update_id($id, $data);
}
/**
 * 按条件获取一个分类
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：true
 *     @type string $field 可选;查询字段;默认：*
 *     @type mixed $status 可选;显示状态（normal|hidden）;默认：空
 *     @type mixed $type 可选;队列类型(stirng|array),固定范围(category|tag);默认：category
 *     @type mixed $module 可选;队列类型(stirng|array),固定范围(category|tag);默认：category
 *     @type mixed $id 可选;类型ID(int|array);默认：空
 *     @type mixed $name 可选;分类名称(stirng|array);默认：空
 *     @type mixed $slug 可选;分类别名(stirng|array);默认：空
 *     @type mixed $info 可选;分类描述(stirng|array);默认：空
 *     @type mixed $parent 可选;父级ID(int|array);默认：空
 *     @type mixed $count 可选;数量统计(int|array);默认：空
 *     @type mixed $meta_key 可选;扩展字段限制条件(string|array);默认：空
 *     @type mixed $meta_value 可选;扩展字段值限制条件(string|array);默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed $mixed 查询结果（array|null）
 */
function DcTermFind($args=[]){
    //where动态字段参数
    $where = DcWhereFilter($args, ['id','name','slug','module','controll','action','status','type','info','parent','count','meta_key','meta_value'], 'eq', 'term_');
    //where动态数组参数
    if($args['where']){
        $args['where'] = DcArrayArgs($args['where'], $where);
    }else{
        $args['where'] = $where;
    }
    //返回结果
    return \daicuo\Term::get( DcArrayArgs($args) );
}
/**
 * 按ID快速获取一条队列信息
 * @version 1.6.0 首次引入
 * @param int $id 必需;Id值；默认：空
 * @return mixed $mixed 查询结果(obj|null)
 */
function DcTermFindId($id='', $cache=true){
    return \daicuo\Term::get_id($id, $cache);
}
/**
 * 获取多条分类数据
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：true
 *     @type string $field 可选;查询字段;默认：*
 *     @type string $result 可选;返回结果类型(array|tree|obj);默认：array
 *     @type int $limit 可选;分页大小;默认：0
 *     @type int $page 可选;当前分页;默认：0
 *     @type string $sort 可选;排序字段名(term_id|term_parent|term_order|trem_count|term_meta_key|term_meta_value|meta_value_num);默认：op_order
 *     @type string $order 可选;排序方式(asc|desc);默认：asc
 *     @type string $search 可选;搜索关键词（名称与别名）;默认：空
 *     @type mixed $status 可选;显示状态（normal|hidden）;默认：空
 *     @type mixed $type 可选;队列类型(stirng|array),固定范围(category|tag);默认：category
 *     @type mixed $module 可选;队列类型(stirng|array),固定范围(category|tag);默认：category
 *     @type mixed $id 可选;类型ID(int|array);默认：空
 *     @type mixed $name 可选;分类名称(stirng|array);默认：空
 *     @type mixed $slug 可选;分类别名(stirng|array);默认：空
 *     @type mixed $info 可选;分类描述(stirng|array);默认：空
 *     @type mixed $parent 可选;父级ID(int|array);默认：空
 *     @type mixed $count 可选;数量统计(int|array);默认：空
 *     @type mixed $meta_key 可选;扩展字段限制条件(string|array);默认：空
 *     @type mixed $meta_value 可选;扩展字段值限制条件(string|array);默认：空
 *     @type array $meta_query 可选;自定义筛选字段(二维数组[key,value,compare]);默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 *     @type array $paginate 可选;自定义高级分页参数;默认：空
 * }
 * @return mixed $mixed obj|array|null 查询结果
 */
function DcTermSelect($args=[]){
    //基础定义
    $defaults = array();
    $defaults['cache']    = true;
    $defaults['group']    = '';
    $defaults['join']     = [];
    $defaults['with']     = 'term_meta';
    $defaults['view']     = [];
    $defaults['where']    = [];
    $defaults['paginate'] = [];
    //分页处理
    if(!$args['paginate']){
        if($defaults['paginate'] = DcPageFilter($args)){
            unset($args['limit']);
            unset($args['page']);
        }
    }
    //多条件采用JOIN查询
    if($args['meta_query']){
        $defaults['field'] = 'term.*';
        $defaults['alias'] = 'term';
        $defaults['group'] = 'term.term_id';
        //join固定参数
        //array_push($defaults['join'],['term_meta','term_meta.term_id=term.term_id']);
        //where固定参数
        //array_push($defaults['where'],['term.term_type'=>['eq',DcEmpty($args['type'],'category')]]);
        //where动态参数
        foreach(DcWhereFilter($args, ['id','name','slug','module','controll','action','status','type','info','parent','count'], 'eq', 'term.term_') as $key=>$where){
            array_push($defaults['where'],[$key=>$where]);
        }
        //where动态拼装自定义字段多条件与JOIN
        foreach($args['meta_query'] as $key=>$where){
            //join参数拼装
            array_push($defaults['join'],['term_meta t'.$key, 't'.$key.'.term_id = term.term_id']);
            //where参数拼装
            $whereSon = [];
            if( isset($where['key']) ){
                $whereSon['t'.$key.'.term_meta_key']  = DcWhereValue($where['key'],'eq');
            }
            if( isset($where['value']) ){
                $whereSon['t'.$key.'.term_meta_value'] = DcWhereValue($where['value'],'eq');
            }
            if($whereSon){
                array_push($defaults['where'], $whereSon);
            }
        }
        //where搜索参数
        if($args['search']){
            array_push($defaults['where'],['term.term_name|term.term_slug'=>['like','%'.DcHtml($args['search']).'%']]);
            unset($args['search']);
        }
        //where参数合并
        if($args['where']){
            foreach($args['where'] as $argsKey=>$argsWhere){
                array_push($defaults['where'], [$argsKey=>$argsWhere]);
            }
            unset($args['where']);
        }
        //排序处理
        if($args['sort'] == 'meta_value_num'){
            $args['sort'] = '';
            $args['orderRaw'] = 't0.term_meta_value+0 '.$args['order'];
        }
        unset($args['meta_query']);
        //返回结果
        return \daicuo\Term::result(\daicuo\Term::all(DcArrayArgs($args, $defaults)), DcEmpty($args['result'],'array'));
    }
    //是否视图查询
    if($args['meta_key'] || $args['meta_value']){
        //重置默认条件
        //$defaults['field'] = 'term.*';
        $defaults['group'] = 'term.term_id';
        $defaults['field'] = '';//强制为空下面定义的字段才有效
        $defaults['view']  = [
            ['term', '*'],
            ['term_meta', NULL, 'term_meta.term_id=term.term_id']
        ];
        //自定义字段排序处理
        if($args['sort'] == 'meta_value_num'){
            $args['sort'] = '';
            $args['orderRaw'] = 'term_meta_value+0 '.$args['order'];
        }
    }
    //where固定字段参数
    $defaults['where'] = DcWhereFilter($args, ['id','name','slug','module','controll','action','status','type','info','parent','count','meta_key','meta_value'], 'eq', 'term_');
    //where搜索参数
    if($args['search']){
        $defaults['where'] = DcArrayArgs(['term_name|term_slug'=>['like','%'.DcHtml($args['search']).'%']], $defaults['where']);
        unset($args['search']);
    }
    //where自定义参数合并
    if($args['where']){
        $defaults['where'] = DcArrayArgs($args['where'], $defaults['where']);
        unset($args['where']);
    }
    //返回结果
    return \daicuo\Term::result(\daicuo\Term::all(DcArrayArgs($args, $defaults)), DcEmpty($args['result'], 'array'));
}
/**
 * 获取分类列表checkbox关系
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：false
 *     @type string $result 可选;返回结果类型(array|tree|obj);默认：array
 *     @type string $sort 可选;排序字段名(term_id|term_parent|term_order|trem_count|term_meta_key|term_meta_value|meta_value_num);默认：op_order
 *     @type string $order 可选;排序方式(asc|desc);默认：asc
 *     @type string $search 可选;搜索关键词（名称与别名）;默认：空
 *     @type mixed $status 可选;显示状态（normal|hidden）;默认：空
 *     @type mixed $type 可选;队列类型(stirng|array),固定范围(category|tag);默认：category
 *     @type mixed $module 可选;队列类型(stirng|array),固定范围(category|tag);默认：category
 *     @type mixed $id 可选;类型ID(int|array);默认：空
 *     @type mixed $name 可选;分类名称(stirng|array);默认：空
 *     @type mixed $slug 可选;分类别名(stirng|array);默认：空
 *     @type mixed $info 可选;分类描述(stirng|array);默认：空
 *     @type mixed $parent 可选;父级ID(int|array);默认：空
 *     @type mixed $count 可选;数量统计(int|array);默认：空
 * }
 * @return mixed $mixed obj|null 
 */
function DcTermCheck($args=[]){
    $args = DcArrayArgs($args,[
        'type'       => 'category',
        'fieldKey'   => 'term_id',
        'fieldValue' => 'term_name',
    ]);
    return \daicuo\Term::Option($args);
}
/**
 * 获取分类列表select关系
 * @version 1.6.0 优化调用参数
 * @version 1.5.20 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：false
 *     @type string $result 可选;返回结果类型(array|tree|obj);默认：array
 *     @type string $sort 可选;排序字段名(term_id|term_parent|term_order|trem_count|term_meta_key|term_meta_value|meta_value_num);默认：op_order
 *     @type string $order 可选;排序方式(asc|desc);默认：asc
 *     @type string $search 可选;搜索关键词（名称与别名）;默认：空
 *     @type mixed $status 可选;显示状态（normal|hidden）;默认：空
 *     @type mixed $type 可选;队列类型(stirng|array),固定范围(category|tag);默认：category
 *     @type mixed $module 可选;队列类型(stirng|array),固定范围(category|tag);默认：category
 *     @type mixed $id 可选;类型ID(int|array);默认：空
 *     @type mixed $name 可选;分类名称(stirng|array);默认：空
 *     @type mixed $slug 可选;分类别名(stirng|array);默认：空
 *     @type mixed $info 可选;分类描述(stirng|array);默认：空
 *     @type mixed $parent 可选;父级ID(int|array);默认：空
 *     @type mixed $count 可选;数量统计(int|array);默认：空
 * }
 * @return mixed $mixed null|array
 */
function DcTermOption($args=[]){
    $args = DcArrayArgs($args,[
        'type'       => 'category',
        'fieldKey'   => 'term_id',
        'fieldValue' => 'term_name',
        'isSelect'   => true,
    ]);
    return \daicuo\Term::Option($args);
}
/**
 * 按条件获取队列为导航栏的菜单列表
 * @version 1.6.4 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：true
 *     @type string $result 可选;返回状态(array|tree|level);默认：tree
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type string $module 可选;模型名称;默认：空
 *     @type string $controll 可选;控制器名称;默认：空
 *     @type string $action 可选;操作名称(navbar|navs);默认：空
 *     @type int $limit 可选;分页大小;默认：0
 *     @type string $sort 可选;排序字段名;默认：op_order
 *     @type string $order 可选;排序方式(asc|desc);默认：asc
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed 查询结果obj|null
 */
function DcTermNavbar($args=[])
{
    //默认只查询分类设置为导航栏
    $args = DcArrayArgs($args,[
        'cache'      => true,
        'result'     => 'tree',
        'status'     => 'normal',
        'type'       => 'category',
        'sort'       => 'term_order',
        'order'      => 'desc',
        'meta_key'   => 'term_navbar',
        'meta_value' => 'yes',
    ]);
    //去掉多余条件
    unset($args['action']);
    //字段映射
    $navs = [];
    foreach(DcTermSelect( $args ) as $key=>$value){
        $value['term_link'] = DcUrl($value['term_module'].'/category/index', ['id'=>$value['term_id']], '');
        foreach($value as $key2=>$value2){
            $navs[$key][str_replace('term_','navs_',$key2)] = $value2;
        }
    }
    return $navs;
}
/**
 * 通过termId获取所有子类ID
 * @version 1.6.0 首次引入
 * @param int $termId 必需;队列ID;默认：空
 * @param string $termType 必需;队列类型(category|tag);默认：category
 * @param string $result 必需;返回类型(array|string);默认：array
 * @return mixed $mixed array|string
 */
function DcTermSubIds($termId, $termType='category', $result='array'){
    if(!$termId){
        return null;
    }
    $subIds = [$termId];
    foreach(\daicuo\Term::childrens($termId, $termType) as $key=>$value){
        array_push($subIds, $value['term_id']);
    }
    if($result == 'array'){
        return $subIds;
    }
    return implode(',', $subIds);
}
/**
 * 通过队列名获取队列ID
 * @version 1.6.0 首次引入
 * @param mixed $value 必需;队例字段值；默认：空
 * @param string $type 必需;队例类型(category|tag)；默认：category
 * @param bool $cache 可选;是否缓存；默认：空
 * @return int $int 父级ID值
 */
function DcTermNameToId($value='', $type='category', $cache=true){
    $term = \daicuo\Term::get_by('term_name', $value, $cache, $type);
    return intval($term['term_id']);
}
/**
 * 多个队列名转化为多个队例ID
 * @version 1.6.0 首次引入
 * @param mixed $value 必需;多个队列名称,逗号分隔或数组(string|array)；默认：空
 * @param string $type 必需;队例类型(category|tag)；默认：category
 * @param bool $cache 可选;是否缓存；默认：空
 * @return int $int 父级ID值
 */
function DcTermNameToIds($value='', $type='category', $cache=true){
    if(!$value){
        return [0];
    }
    if(is_array($value)){
        $value = implode(',',$value);
    }
    $terms = DcTermSelect([
        'cache' => $cache,
        'type'  => $type,
        'name'  => ['in', $value],
        //'sort'  => 'meta_value_num',
        //'meta_key' => ['in','term_tpl,term_hook']
    ]);
    return array_column($terms, 'term_id');
}
/**
 * 通过队列别名获取队列ID
 * @version 1.6.0 首次引入
 * @param mixed $value 必需;队例字段值；默认：空
 * @param string $type 必需;队例类型(category|tag)；默认：category
 * @param bool $cache 可选;是否缓存；默认：空
 * @return int $int 父级ID值
 */
function DcTermSlugToId($value='', $type='category', $cache=true){
    $term = \daicuo\Term::get_by('term_slug', $value, $cache, $type);
    return intval($term['term_id']);
}
/**
 * 多个队列别名转化为多个队例ID
 * @version 1.6.0 首次引入
 * @param mixed $value 必需;多个队列名称,逗号分隔或数组(string|array)；默认：空
 * @param string $type 必需;队例类型(category|tag)；默认：category
 * @param bool $cache 可选;是否缓存；默认：空
 * @return int $int 父级ID值
 */
function DcTermSlugToIds($value='', $type='category', $cache=true){
    if(!$value){
        return [0];
    }
    if(is_array($value)){
        $value = implode(',',$value);
    }
    $terms = DcTermSelect([
        'cache' => $cache,
        'type'  => $type,
        'slug'  => ['in', $value],
    ]);
    return array_column($terms, 'term_id');
}

/**************************************************用户模块***************************************************/
/**
 * 添加一个用户至数据库
 * @version 1.6.0 首次引入
 * @param array $data 必需;普通表单数组形式;默认：空
 * @return mixed $mixed 自增ID
 */
function DcUserSave($data=[]){
    $data = DcArrayArgs($data,[
        'user_status'       => 'normal',
        'user_hits'         => 0,
        'user_views'        => 0,
        'user_capabilities' => 'guest',
    ]);
    return \daicuo\User::save($data);
}
/**
 * 批量添加用户至数据库
 * @version 1.6.0 首次引入
 * @param array $data 必需;二维数组;默认：空
 * @return obj $obj 多条数据集
 */
function DcUserSaveAll($data=[]){
    return \daicuo\User::save_all($data);
}
/**
 * 按条件删除一条用户数据
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type int $id 可选;配置ID;默认：空
 *     @type string $name 可选;配置名称;默认：空
 *     @type string $slug 可选;配置名称;默认：空
 *     @type string $module 可选;模型名称;默认：空
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed $mixed 查询结果（array|null）
 */
function DcUserDelete($args=[]){
    //动态参数
    $where = DcWhereFilter($args, ['id','name','slug','module','status'], 'eq', 'user_');
    //参数合并
    if($args['where']){
        $where = DcArrayArgs($args['where'], $where);
    }
    return \daicuo\User::delete($where);
}
/**
 * 按ID快速删除一条用户
 * @version 1.6.0 首次引入
 * @param int $value 必需;Id值;默认：空
 * @return bool $bool true|false
 */
function DcUserDeleteId($id=''){
    return \daicuo\User::delete_user_by('user_id',$id);
}
/**
 * 按ID快速删除多条用户
 * @version 1.6.0 首次引入
 * @param mixed $ids 必需;Id值/多个用逗号分隔或者数组(string|array);默认：空
 * @return array $array 多条删除结果
 */
function DcUserDeleteIds($ids=''){
    return \daicuo\User::delete_ids($ids);
}
/**
 * 按字段名称与值快速删除一条用户
 * @version 1.6.0 首次引入
 * @param string $field 必需;字段名(user_id|user_name|user_email|user_mobile|user_token);默认：user_id
 * @param mixed $value 必需;字段值;默认：空
 * @return bool $bool true|false
 */
function DcUserDeleteField($field='user_id', $value=''){
    return \daicuo\User::delete_user_by($field, $value);
}
/**
 * 按模块标识快速删除多条用户
 * @version 1.6.0 首次引入
 * @param string $module 必需;模块名;默认：空
 * @return array $array 基础数据与扩展数据删除结果
 */
function DcUserDeleteModule($module=''){
    return \daicuo\User::delete_module($module);
}
/**
 * 按条件修改一个用户
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type int $id 可选;用户ID;默认：空
 *     @type string $name 可选;用户名称;默认：空
 *     @type string $slug 可选;用户别名;默认：空
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type string $module 可选;模型名称;默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @param array $data 必需;待修改的数据（普通表单数组形式）;默认：空
 * @return mixed $mixed 查询结果（array|null）
 */
function DcUserUpdate($args=[], $data=[]){
    //动态参数
    $where = DcWhereFilter($args, ['id','name','slug','module','status'], 'eq', 'user_');
    //参数合并
    if($args['where']){
        $where = DcArrayArgs($args['where'], $where);
    }
    return \daicuo\User::update($where, $data, 'user_meta');
}
/**
 * 按Id快速修改一个用户
 * @param int $id 必需;ID值;默认：空
 * @param array $data 必需;表单数据（一维数组）;默认：空 
 * @return mixed $mixed obj|null
 */
function DcUserUpdateId($id, $data){
    return \daicuo\User::update_id($id, $data);
}
/**
 * 按字段名称与值快速删除一条用户
 * @version 1.6.0 首次引入
 * @param string $field 必需;字段名(user_id|user_name|user_email|user_mobile|user_token);默认：user_id
 * @param mixed $value 必需;字段值;默认：空
 * @param array $data 必需;表单数据（一维数组）;默认：空 
 * @return bool $bool true|false
 */
function DcUserUpdateField($field='user_id', $value='', $data=[]){
    return \daicuo\User::update_user_by($field, $value, $data);
}
/**
 * 按条件获取一个用户数据
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：true
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type int $id 可选;用户ID;默认：空
 *     @type mixed $name 可选;用户名称(stirng|array);默认：空
 *     @type mixed $slug 可选;用户别名(stirng|array);默认：空
 *     @type mixed $module 可选;模型名称(stirng|array);默认：空
 *     @type mixed $email 可选;用户邮箱(int|array);默认：空
 *     @type mixed $mobile 可选;用户手机(stirng|array);默认：空
 *     @type mixed $token 可选;用户令牌(string|array);默认：空
 *     @type mixed $meta_key 可选;扩展字段限制条件(string|array);默认：空
 *     @type mixed $meta_value 可选;扩展字段值限制条件(string|array);默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed $mixed 查询结果（array|null）
 */
function DcUserFind($args=[]){
    //where动态字段参数
    $where = DcWhereFilter($args, ['id','name','slug','module','status','email','mobile','token','meta_key','meta_value'], 'eq', 'user_');
    //where动态数组参数
    if($args['where']){
        $args['where'] = DcArrayArgs($args['where'], $where);
    }else{
        $args['where'] = $where;
    }
    //返回结果
    return \daicuo\User::get( DcArrayArgs($args) );
}
/**
 * 按ID快速获取一条用户数据
 * @version 1.6.0 首次引入
 * @param int $id 必需;Id值；默认：空
 * @param bool $cache 可选;是否缓存;默认：true
 * @return mixed $mixed 查询结果(obj|null)
 */
function DcUserFindId($id='', $cache=true){
    return \daicuo\User::get_user_by('user_id', $id, $cache);
}
/**
 * 按字段名称与值快速获取一条用户数据
 * @version 1.6.0 首次引入
 * @param string $field 必需;字段名(user_id|user_name|user_email|user_mobile|user_token);默认：user_id
 * @param mixed $value 必需;字段值;默认：空
 * @param bool $cache 可选;是否缓存;默认：true
 * @return bool $bool true|false
 */
function DcUserFindField($field='user_id', $value='', $cache=true){
    return \daicuo\User::get_user_by($field, $value, $cache);
}
/**
 * 获取多条用户数据
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：false
 *     @type int $limit 可选;分页大小;默认：0
 *     @type int $page 可选;当前分页;默认：0
 *     @type string $field 可选;查询字段;默认：*
 *     @type string $result 可选;返回结果类型(array|tree|obj);默认：array
 *     @type string $sort 可选;排序字段名(user_id|user_views|user|hits|user_meta_key|user_meta|value|meta_value_num);默认：op_order
 *     @type string $order 可选;排序方式(asc|desc);默认：asc
 *     @type string $search 可选;搜索关键词（名称与别名）;默认：空
 *     @type mixed $status 可选;显示状态（normal|hidden）;默认：空
 *     @type mixed $module 可选;来源模块(stirng|array);默认：空
 *     @type mixed $controll 可选;来源控制器(stirng|array);默认：空
 *     @type mixed $action 可选;来源操作(stirng|array);默认：空
 *     @type mixed $id 可选;用户ID(int|array);默认：空
 *     @type mixed $slug 可选;分类别名(stirng|array);默认：空
 *     @type mixed $name 可选;用户名(stirng|array);默认：空
 *     @type mixed $nice_name 可选;呢称(stirng|array);默认：空
 *     @type mixed $email 可选;用户邮箱(stirng|array);默认：空
 *     @type mixed $mobile 可选;用户手机(stirng|array);默认：空
 *     @type mixed $creatime_time 可选;创建时间(int|array);默认：空
 *     @type mixed $update_time 可选;修改时间(int|array);默认：空
 *     @type mixed $creatime_ip 可选;注册时IP(stirng|array);默认：空
 *     @type mixed $update_ip 可选;最后登录IP(string|array);默认：空
 *     @type mixed $views 可选;人气值(int|array);默认：空
 *     @type mixed $hits 可选;点击数(int|array);默认：空
 * }
 * @return mixed $mixed obj|array|null 查询结果
 */
function DcUserSelect($args=[]){
    //基础定义
    $defaults = array();
    $defaults['cache']    = true;
    $defaults['group']    = '';
    $defaults['with']     = 'user_meta';
    $defaults['join']     = [];
    $defaults['view']     = [];
    $defaults['where']    = [];
    $defaults['paginate'] = [];
    //分页处理
    if(!$args['paginate']){
        if($defaults['paginate'] = DcPageFilter($args)){
            unset($args['limit']);
            unset($args['page']);
        }
    }
    //多条件采用JOIN查询
    if($args['meta_query']){
        $defaults['field'] = 'user.*';
        $defaults['alias'] = 'user';
        $defaults['group'] = 'user.user_id';
        //where动态参数
        foreach(DcWhereFilter($args, ['id','name','slug','email','mobile','token','status','module','controll','action'], 'eq', 'user.user_') as $key=>$where){
            array_push($defaults['where'],[$key=>$where]);
        }
        //where动态拼装自定义字段多条件与JOIN
        foreach($args['meta_query'] as $key=>$where){
            //join参数拼装
            array_push($defaults['join'],['user_meta t'.$key, 't'.$key.'.user_id = user.user_id']);
            //where参数拼装
            $whereSon = [];
            if( isset($where['key']) ){
                $whereSon['t'.$key.'.user_meta_key']  = DcWhereValue($where['key'],'eq');
            }
            if( isset($where['value']) ){
                $whereSon['t'.$key.'.user_meta_value'] = DcWhereValue($where['value'],'eq');
            }
            if($whereSon){
                array_push($defaults['where'], $whereSon);
            }
        }
        //where搜索参数
        if($args['search']){
            array_push($defaults['where'],['user.user_name|user.user_slug|user.user_nice_name|user.user_email|user.user_mobile'=>['like','%'.DcHtml($args['search']).'%']]);
            unset($args['search']);
        }
        //where参数合并
        if($args['where']){
            foreach($args['where'] as $argsKey=>$argsWhere){
                array_push($defaults['where'], [$argsKey=>$argsWhere]);
            }
            unset($args['where']);
        }
        //排序处理
        if($args['sort'] == 'meta_value_num'){
            $args['sort'] = '';
            $args['orderRaw'] = 't0.user_meta_value+0 '.$args['order'];
        }
        //清除内存
        unset($args['meta_query']);
        //返回结果
        return \daicuo\User::result(\daicuo\User::all(DcArrayArgs($args, $defaults)), DcEmpty($args['result'],'array'));
    }
    //视图查询
    if($args['meta_key'] || $args['meta_value']){
        $defaults['field'] = 'user.*';
        $defaults['group'] = 'user.user_id';
        $defaults['view']  = [
            ['user', '*'],
            ['user_meta', NULL, 'user_meta.user_id=user.user_id'],
        ];
    }
    //where动态参数
    $defaults['where'] = DcWhereFilter($args, ['id','name','slug','email','mobile','token','status','module','controll','action','meta_key','meta_value'], 'eq', 'user_');
    //where搜索参数
    if($args['search']){
        $defaults['where'] = DcArrayArgs(['user_name|user_slug|user_nice_name|user_email|user_mobile'=>['like','%'.DcHtml($args['search']).'%']],$defaults['where']);
        unset($args['search']);
    }
    //where参数合并
    if($args['where']){
        $defaults['where'] = DcArrayArgs($args['where'], $defaults['where']);
        unset($args['where']);
    }
    //排序处理
    if($args['sort'] == 'meta_value_num'){
        $args['sort'] = '';
        $args['orderRaw'] = 'user_meta_value+0 '.$args['order'];
    }
    //返回结果
    return \daicuo\User::result(\daicuo\User::all(DcArrayArgs($args, $defaults)), DcEmpty($args['result'],'array'));
}
/**
 * 通过用户名与密码快速登录
 * @version 1.6.0 首次引入
 * @param array $post 必需;查询条件数组格式 {
 *     @type string $user_name 必需;用户名、邮箱、手机自动判断（name|email|mobile）;默认：name
 *     @type string $user_pass 必需;用户密码;默认：空
 *     @type bool $user_expire 可选;是否记住登录（由后台配置记录时长）;默认：false
 * }
 * @return bool $bool 是否登录成功 
 */
function DcUserLogin($post=[]){
    return \daicuo\User::Login($post);
}
/**
 * 退出用户登录
 * @version 1.6.0 首次引入
 * @return bool $bool 是否登录成功 
 */
function DcUserLogout(){
    return \daicuo\User::Logout();
}
/**
 * 判断当前用户是否被锁定
 * @version 1.6.0 首次引入
 * @return bool $bool true|false  
 */
function DcUserCurrentIsLock(){
    return \daicuo\User::is_lock();
}
/**
 * 判断当前用户是否已登录
 * @version 1.6.0 首次引入
 * @return bool $bool true|false  
 */
function DcUserCurrentIsLogin(){
    return \daicuo\User::is_logged_in();
}
/**
 * 获取当前用户登录信息
 * @version 1.6.0 首次引入
 * @return array $array 用户信息（未登录则为游客） 
 */
function DcUserCurrentGet(){
    return \daicuo\User::get_current_user();
}
/**
 * 获取当前用户登录信息
 * @version 1.6.0 首次引入
 * @return array $array 用户信息（未登录则为游客） 
 */
function DcUserCurrentGetId(){
    return \daicuo\User::get_current_user_id();
}
/**
 * 通过ID设置当前用户登录信息（但不会登录为该用户ID）
 * @version 1.6.0 首次引入
 * @param int $id 必需;用户ID;默认：空
 * @return array $array 用户信息（未登录则为游客） 
 */
function DcUserCurrentSet($id=0){
    return \daicuo\User::set_current_user($id);
}
/**
 * 通过用户ID与metaKey快速增加一条自定义信息
 * @version 1.6.0 首次引入
 * @param string $userId 必需;用户ID;默认：空
 * @param string $metaKey 必需;自定义字段;默认：空
 * @param mixed $metaValue 必需;自定义字段段（int|array|string）;默认：空
 * @return int $int 影响条数
 */
function DcUserMetaSave($userId=0, $metaKey='', $metaValue=''){
    return \daicuo\User::save_user_meta($userId, $metaKey, $metaValue);
}
/**
 * 通过用户ID与metaKey快速删除自定义信息
 * @version 1.6.0 首次引入
 * @param string $userId 必需;用户ID;默认：空
 * @param string $metaKey 可选;自定义字段名为空时删除所有自定义字段;默认：空
 * @return int $int 影响条数
 */
function DcUserMetaDelete($userId=0, $metaKey=''){
    return \daicuo\User::delete_user_meta($userId, $metaKey);
}
/**
 * 通过用户ID与metaKey快速修改一条自定义信息
 * @version 1.6.0 首次引入
 * @param string $userId 必需;用户ID;默认：空
 * @param string $metaKey 必需;自定义字段;默认：空
 * @param mixed $metaValue 必需;自定义字段段（int|array|string）;默认：空
 * @return int $int 影响条数
 */
function DcUserMetaUpdate($userId=0, $metaKey='', $metaValue=''){
    return \daicuo\User::update_user_meta($userId, $metaKey, $metaValue);
}
/**
 * 通过用户ID与metaKey快速获取一条metaValue
 * @version 1.6.0 首次引入
 * @param string $userId 必需;用户ID;默认：空
 * @param string $metaKey 必需;自定义字段;默认：空
 * @return int $int 影响条数
 */
function DcUserMetaGet($userId=0, $metaKey=''){
    return \daicuo\User::get_user_meta($userId, $metaKey);
}
/**
 * 通过用户ID与metaKey快速获取一条metaValue
 * @version 1.6.0 首次引入
 * @param string $userId 必需;用户ID;默认：空
 * @return array $array keyvalue形式的数组
 */
function DcUserMetaSelect($userId){
    return \daicuo\User::select_user_meta($userId);
}
/**
 * 按条件删除一条用户扩展表数据
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type int $id 可选;用户ID;默认：空
 *     @type int $meta_id 可选;扩展ID;默认：空
 *     @type string $meta_key 可选;自定义字段键名;默认：空
 *     @type string $meta_value 可选;自定义字段键值;默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed $mixed obj|null
 */
function DcUserMetaDeletes($args=[]){
    //动态参数
    $where = DcWhereFilter($args, ['id','meta_id','meta_key','meta_value'], 'eq', 'user_');
    //参数合并
    if($args['where']){
        $where = DcArrayArgs($args['where'], $where);
    }
    return \daicuo\User::delete_user_meta($where);
}

/************************************用户TOKEN模块*******************************************************/
/**
 * 通过用户名与密码快速获取TOKEN信息、每次成功后会刷新过期时间
 * @version 1.6.0 首次引入
 * @param string $userName 必需;用户名;默认：空
 * @param string $userPass 必需;用户密码;默认：空
 * @return mixed $mixed 登录成功时返回token值与过期时间(array|false)
 */
function DcUserTokenLogin($userName='',$userPass=''){
    return \daicuo\User::token_login($userName,$userPass);
}
/**
 * 通过Token值验证是否正常（是否存在并未过期）
 * @version 1.6.0 首次引入
 * @param string $userToken 必需;用户TOKEN;默认：空
 * @return bool $bool true|false
 */
function DcUserTokenCheck($userToken=''){
    return \daicuo\User::token_check($userToken);
}
/**
 * 通过用户ID生成新的TOKEN
 * @version 1.6.0 首次引入
 * @param int $userId 必需;用户ID;默认：空
 * @return string $string 用户TOKEN
 */
function DcUserTokenCreate($userId=0){
    return \daicuo\User::token_create($userId);
}
/**
 * 通过用户ID设置用户TOKEN过期
 * @version 1.6.0 首次引入
 * @param int $userId 必需;用户ID;默认：空
 * @return string $string 用户TOKEN
 */
function DcUserTokenDelete($userId=0){
    return \daicuo\User::token_delete($userId);
}
/**
 * 通过用户ID修改Token过期时间与Token值
 * @version 1.6.0 首次引入
 * @param int $userId 必需;用户ID;默认：空
 * @param string $userExpire 必需;延迟时长（天）;默认：30
 * @param string $userToken 可选;自定义TOKEN（不修改传入旧的）;默认：空
 * @return mixed $mixed 成功时返回Token值与过期时间(array|false)
 */
function DcUserTokenUpdate($userId=0, $userExpire=30, $userToken=''){
    return \daicuo\User::token_update($userId, $userExpire, $userToken);
}
/**
 * 通过Token值延迟过期时间
 * @version 1.6.0 首次引入
 * @param string $userToken 必需;用户旧TOKEN;默认：空
 * @param string $userExpire 必需;延迟时长（天）;默认：30
 * @return array $array TOKEN值与新的过期时间
 */
function DcUserTokenRefresh($userToken='', $userExpire=30){
    return \daicuo\User::token_refresh($userToken, $userExpire);
}
/**
 * 通过Token请求获取用户信息（Header['HTTP-TOKEN']>Url['token']）
 * @version 1.6.0 首次引入
 * @return array $array 失败时返回游客信息
 */
function DcUserTokenGet(){
    return \daicuo\User::token_current_user();
}

/************************************用户权限模块*******************************************************/
/**
 * 添加一个角色与权限关系至数据库
 * @version 1.6.0 首次引入
 * @param string $role 必需;角色名;默认：空
 * @param string $note 必需;权限节点（如：index/index/index）;默认：空
 * @return int $int 自增ID
 */
function DcAuthSave($role='', $note=''){
    if(!$role || !$note){
        return 0;
    }
    $data = [];
    $data['op_name']     = $role;
    $data['op_value']    = $note;
    $data['op_module']   = 'common';
    $data['op_controll'] = 'system';
    $data['op_action']   = 'auth';
    $data['op_order']    = 0;
    $data['op_status']   = 'normal';
    $data = DcArrayArgs(['op_name'=>$role,'op_value'=>$note], DcAuthData());
    $result = \daicuo\Op::save($data);
    if($result){
        DcCache('auth_all', null);
    }
    return $result;
}
/**
 * 批量添加多个角色与权限关系至数据库
 * @version 1.6.0 首次引入
 * @param array $data 必需;keyValue数组格式;默认：空
 * @return mixed $mixed obj|null
 */
function DcAuthSaveAll($data=[]){
    if(!$data){
        return null;
    }
    $result = \daicuo\Op::write($data,'common','system','auth','0','no');
    if(!is_null($result)){
        DcCache('auth_all', null);
    }
    return $result;
}
/**
 * 按ID快速删除一条权限关系
 * @version 1.6.0 首次引入
 * @param int $id 必需;Id值;默认：空
 * @return int $int 影响条数
 */
function DcAuthDeleteId($id=''){
    return DcCacheResult(\daicuo\Op::delete_id($id), 'auth_all', 'key');
}
/**
 * 获取系统已配置的角色与权限对应关系
 * @version 1.6.0 首次引入
 * @return array $array 二维数组对应关系
 */
function DcAuthConfig(){
    return \daicuo\Auth::get_config();
}
/**
 * 获取系统已配置的角色列表
 * @version 1.6.0 首次引入
 * @return array $array 普通数组
 */
function DcAuthRoles(){
    return \daicuo\Auth::get_roles();
}
/**
 * 获取系统已配置的权限节点列表
 * @version 1.6.0 首次引入
 * @return array $array 普通数组
 */
function DcAuthCaps(){
    return \daicuo\Auth::get_caps();
}
/**
 * 获取一个用户拥有的所有权限
 * @version 1.6.0 首次引入
 * @param string|array $userRoles 必需;用户的角色名;默认空
 * @param string|array $userCaps 可选;用户的权限节点名（可单独设置）
 * @return array $array 普通数组
 */
function DcAuthCapsUser($userRoles=[], $userCaps=[]){
    return \daicuo\Auth::get_user_caps($userRoles, $userCaps);
}
/**
 * 验证一个用户拥有的所有权限是否在权限节点内
 * @version 1.6.0 首次引入
 * @param string|array $name 必需;需要验证的规则列表,支持逗号分隔的权限规则或索引数组;默认空
 * @param string|array $userRoles 必需;用户的角色名(为用户ID时自动查询);默认空
 * @param string|array $userCaps 可选;用户的权限节点名（可单独设置）;默认空
 * @param string $relation 可选;验证关系(and|or);默认：or
 * @param string $mode 可选;执行验证的模式,可分为url,normal;默认：url
 * @return bool $bool true|false
 */
function DcAuthCheck($name, $userRoles='', $userCaps='', $relation = 'or', $mode = 'url'){
    return \daicuo\Auth::check($name, $userRoles, $userCaps, $relation, $mode);
}
/**
 * 获取权限列表keyValue数组格式
 * @version 1.3.0 首次引入
 * @return array $array 数组
 */
function DcAuthOption(){
    $options = [];
    foreach(\daicuo\Auth::get_roles() as $role){
        $options[$role] = lang($role);
    }
    unset($options['guest']);
    return $options;
}

/**************************************************内容模块***************************************************/
/**
 * 添加一个内容至数据库
 * @version 1.6.0 首次引入
 * @param array $data 必需;普通表单数组形式;默认：空
 * @return mixed $mixed 自增ID
 */
function DcInfoSave($data=[]){
    $data = DcArrayArgs($data,[
        'info_status'       => 'normal',
        'info_hits'         => 0,
        'info_views'        => 0,
    ]);
    return \daicuo\Info::save($data);
}
/**
 * 批量添加内容至数据库
 * @version 1.6.0 首次引入
 * @param array $data 必需;二维数组;默认：空
 * @return obj $obj 多条数据集
 */
function DcInfoSaveAll($data=[]){
    return \daicuo\Info::save_all($data);
}
/**
 * 按条件删除一条内容数据
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type int $id 可选;配置ID;默认：空
 *     @type string $name 可选;配置名称;默认：空
 *     @type string $slug 可选;配置名称;默认：空
 *     @type string $module 可选;模型名称;默认：空
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed $mixed 查询结果（array|null）
 */
function DcInfoDelete($args=[]){
    //动态参数
    $where = DcWhereFilter($args, ['id','title','name','slug','excerpt','password','parent','user_id','create_time','update_time','type','mime_type','views','hits','status','module','controll','action'], 'eq', 'Info_');
    //参数合并
    if($args['where']){
        $where = DcArrayArgs($args['where'], $where);
    }
    return \daicuo\Info::delete($where);
}
/**
 * 按ID快速删除一条内容
 * @version 1.6.0 首次引入
 * @param int $value 必需;Id值;默认：空
 * @return bool $bool true|false
 */
function DcInfoDeleteId($id=''){
    return \daicuo\Info::delete_id($id);
}
/**
 * 按条件修改一个内容
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type int $id 可选;内容ID;默认：空
 *     @type string $name 可选;内容名称;默认：空
 *     @type string $slug 可选;内容别名;默认：空
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type string $module 可选;模型名称;默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @param array $data 必需;待修改的数据（普通表单数组形式）;默认：空
 * @return mixed $mixed 查询结果（array|null）
 */
function DcInfoUpdate($args=[], $data=[]){
    //动态参数
    $where = DcWhereFilter($args, ['id','title','name','slug','excerpt','password','parent','user_id','create_time','update_time','type','mime_type','views','hits','status','module','controll','action'], 'eq', 'Info_');
    //参数合并
    if($args['where']){
        $where = DcArrayArgs($args['where'], $where);
    }
    return \daicuo\Info::update($where, $data);
}
/**
 * 按Id快速修改一个内容
 * @param int $id 必需;ID值;默认：空
 * @param array $data 必需;表单数据（一维数组）;默认：空 
 * @return mixed $mixed obj|null
 */
function DcInfoUpdateId($id, $data){
    return \daicuo\Info::update_id($id, $data);
}
/**
 * 按条件获取一个内容数据
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：true
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type int $id 可选;内容ID;默认：空
 *     @type mixed $name 可选;内容名称(stirng|array);默认：空
 *     @type mixed $slug 可选;内容别名(stirng|array);默认：空
 *     @type mixed $module 可选;模型名称(stirng|array);默认：空
 *     @type mixed $meta_key 可选;扩展字段限制条件(string|array);默认：空
 *     @type mixed $meta_value 可选;扩展字段值限制条件(string|array);默认：空
 *     @type array $where 可选;自定义高级查询条件;默认：空
 * }
 * @return mixed $mixed 查询结果（array|null）
 */
function DcInfoFind($args=[]){
    //where动态字段参数
    $where = DcWhereFilter($args, ['id','title','name','slug','excerpt','password','parent','user_id','create_time','update_time','type','mime_type','views','hits','status','module','controll','action'], 'eq', 'info_');
    //where动态数组参数
    if($args['where']){
        $args['where'] = DcArrayArgs($args['where'], $where);
    }else{
        $args['where'] = $where;
    }
    //返回结果
    return \daicuo\Info::get( DcArrayArgs($args) );
}
/**
 * 按ID快速获取一条内容数据
 * @version 1.6.0 首次引入
 * @param int $id 必需;Id值；默认：空
 * @param bool $cache 可选;是否缓存;默认：true
 * @param string $status 可选;数据状态;默认：normal
 * @return mixed $mixed 查询结果(obj|null)
 */
function DcInfoFindId($id='', $cache=true, $status='normal'){
    return \daicuo\Info::get_by('info_id', $id, $cache, false, $status);
}
/**
 * 按别名快速获取一条内容数据
 * @version 1.6.0 首次引入
 * @param int $id 必需;Id值；默认：空
 * @param bool $cache 可选;是否缓存;默认：true
 * @param string $status 可选;数据状态;默认：normal
 * @return mixed $mixed 查询结果(obj|null)
 */
function DcInfoFindSlug($id='', $cache=true, $status='normal'){
    return \daicuo\Info::get_by('info_slug', $id, $cache, false, $status);
}
/**
 * 获取多条内容数据
 * @version 1.6.0 首次引入
 * @param array $args 必需;查询条件数组格式 {
 *     @type bool $cache 可选;是否缓存;默认：true
 *     @type int $limit 可选;分页大小;默认：0
 *     @type int $page 可选;当前分页;默认：0
 *     @type string $field 可选;查询字段;默认：*
 *     @type string $status 可选;显示状态（normal|hidden）;默认：空
 *     @type string $sort 可选;排序字段名(info_id|info_order|info_views|info_hits|meta_value_num);默认：info_id
 *     @type string $order 可选;排序方式(asc|desc);默认：asc
 *     @type string $search 可选;搜索关键词（info_name|info_slug|info_excerpt）;默认：空
 *     @type mixed $id 可选;内容ID限制条件(int|array);默认：空
 *     @type mixed $title 可选;标题限制条件(stirng|array);默认：空
 *     @type mixed $name 可选;名称限制条件(stirng|array);默认：空
 *     @type mixed $slug 可选;别名限制条件(stirng|array);默认：空
 *     @type mixde $module 可选;所属模块(stirng|array);默认：空
 *     @type mixde $controll 可选;所属迭制器(stirng|array);默认：空
 *     @type mixde $action 可选;所属操作(stirng|array);默认：空
 *     @type mixed $term_id 可选;分类法ID限制条件(string|array);默认：空
 *     @type array $meta_query 可选;自定义字段(二维数组[key=>['eq','key'],value=>['in','key']]);默认：空
 *     @type string $result 可选;返回结果类型(array|obj);默认：array
 *     @type array $where 可选;自定义高级查询条件;默认：空
 *     @type array $paginate 可选;自定义高级分页参数;默认：空
 * }
 * @return mixed $mixed obj|array|null 查询结果
 */
function DcInfoSelect($args=[]){
    //基础定义
    $defaults = array();
    $defaults['cache']    = true;
    $defaults['group']    = '';
    $defaults['with']     = 'info_meta,term,user';
    $defaults['join']     = [];
    $defaults['view']     = [];
    $defaults['where']    = [];
    $defaults['paginate'] = [];
    //分页处理
    if(!$args['paginate']){
        if($defaults['paginate'] = DcPageFilter($args)){
            unset($args['limit']);
            unset($args['page']);
        }
    }
    //多条件采用JOIN查询
    if($args['meta_query']){
        $defaults['field'] = 'info.*';
        $defaults['alias'] = 'info';
        $defaults['group'] = 'info.info_id';
        //join固定参数
        array_push($defaults['join'],['term_map','term_map.detail_id = info.info_id']);
        //where动态参数
        foreach(DcWhereFilter($args, ['id','title','name','slug','excerpt','password','parent','user_id','create_time','update_time','type','mime_type','views','hits','status','module','controll','action'], 'eq', 'info.info_') as $key=>$where){
            array_push($defaults['where'],[$key=>$where]);
        }
        //where动态拼装自定义字段多条件与JOIN
        foreach($args['meta_query'] as $key=>$where){
            //join参数拼装
            array_push($defaults['join'],['info_meta t'.$key, 't'.$key.'.info_id = info.info_id']);
            //where参数拼装
            $whereSon = [];
            if( isset($where['key']) ){
                $whereSon['t'.$key.'.info_meta_key']  = DcWhereValue($where['key'],'eq');
            }
            if( isset($where['value']) ){
                $whereSon['t'.$key.'.info_meta_value'] = DcWhereValue($where['value'],'eq');
            }
            if($whereSon){
                array_push($defaults['where'], $whereSon);
            }
            /*array_push($defaults['where'],[
                't'.$key.'.info_meta_key'   => [DcEmpty($where['compare'],'eq'), $where['key']],
                't'.$key.'.info_meta_value' => [DcEmpty($where['compare'],'eq'), $where['value']],
            ]);*/
        }
        //where搜索参数
        if($args['search']){
            array_push($defaults['where'],['info.info_title|info.info_name|info.info_slug|info.info_excerpt'=>['like','%'.DcHtml($args['search']).'%']]);
            unset($args['search']);
        }
        //where分类法参数
        if( $args['term_id'] ){
            array_push($defaults['where'],['term_map.term_id' => DcWhereValue($args['term_id'],'in')]);
            unset($args['much_id']);
        }
        //where参数合并
        if($args['where']){
            foreach($args['where'] as $argsKey=>$argsWhere){
                array_push($defaults['where'], [$argsKey=>$argsWhere]);
            }
            unset($args['where']);
        }
        //排序处理
        if($args['sort'] == 'meta_value_num'){
            $args['sort'] = '';
            $args['orderRaw'] = 't0.info_meta_value+0 '.$args['order'];
        }
        //清理内存
        unset($args['meta_query']);
        //返回结果
        return \daicuo\Info::result(\daicuo\Info::all(DcArrayArgs($args, $defaults)), DcEmpty($args['result'],'array'));
    }
    //是否视图查询
    if($args['meta_key'] || $args['meta_value'] || $args['term_id']){
        //重置默认条件
        $defaults['field'] = 'info.*';
        $defaults['group'] = 'info.info_id';
        $defaults['view']  = [
            ['info', '*'],
            ['info_meta', NULL, 'info_meta.info_id=info.info_id']
        ];
        //队列ID存在时还需关联关系表
        if($args['term_id']){
            array_push($defaults['view'], ['term_map' , NULL, 'term_map.detail_id=info.info_id'] );
        }
        //自定义字段排序处理
        if($args['sort'] == 'meta_value_num'){
            $args['sort'] = '';
            $args['orderRaw'] = 'info_meta_value+0 '.$args['order'];
        }
    }
    //where固定字段参数
    $defaults['where'] = DcWhereFilter($args, ['id','title','name','slug','excerpt','password','parent','user_id','create_time','update_time','type','mime_type','views','hits','status','module','controll','action','meta_key','meta_value'], 'eq', 'info_');
    //where搜索参数
    if($args['search']){
        $defaults['where'] = DcArrayArgs(['info_title|info_name|info_slug|info_excerpt'=>['like','%'.DcHtml($args['search']).'%']],$defaults['where']);
        unset($args['search']);
    }
    //where分类法参数(视图查询)
    if( $args['term_id'] ){
        $defaults['where']['term_map.term_id'] = DcWhereValue($args['term_id'], 'in');
        unset($args['term_id']);
    }
    //where自定义参数合并
    if($args['where']){
        $defaults['where'] = DcArrayArgs($args['where'], $defaults['where']);
        unset($args['where']);
    }
    //返回结果
    return \daicuo\Info::result(\daicuo\Info::all(DcArrayArgs($args, $defaults)), DcEmpty($args['result'], 'array'));
}

/**************************************************兼容旧版本函数***************************************************/
function DcLoadConfig($file, $name = '', $range = ''){
    return DcConfigLoad($file, $name, $range);
}
function DcWhereByQuery($fields=[], $condition='eq', $requestParams=[]){
    return DcWhereQuery($fields, $condition, $requestParams);
}